#!/usr/bin/env python

import dbf
import tempfile, os, shutil, sys
import datetime

class ReaderConsum:
    def __init__(self, cale):
        self.cale = cale

    def __find_files(self):
        if os.path.isdir(self.cale):
            file_list = []
            if self.cale != None:
                for root, sub_folders, files in os.walk(self.cale):
                    for f in files:
                        if( os.path.splitext(f)[1].lower() == '.dbf' ):
                            file_list.append(os.path.join(root, f))
                return file_list
            else:
                return None
        elif os.path.isfile(self.cale):
            return [self.cale]
        else:
            return None

    def __get_values_for_file(self, fisier):
        ''' Returneaza valorile de consum gasite intr-un fisier specificat '''
        try:
            table = dbf.Table(os.path.abspath(fisier))
            table.open()
            valori = []
            for valoare in table[0]:
                valori.append(valoare)
            return valori
        except:
            e = sys.exc_info()[0]
            print ("Eroare la citire fisier %s: %s", fisier, e)
            return None

    def read(self):
        toate_valorile = []
        files = self.__find_files()
        for f in files:
            valori_fisier = self.__get_values_for_file(f)
            if valori_fisier != None:
                toate_valorile.append(valori_fisier)
        return toate_valorile


class CalculatorConsum:
    def __init__(self, cititor):
        self.cititor = cititor
        self.toate_valorile = None

    def total(self, filtre=None, reciteste=False):
        if (not reciteste and (self.toate_valorile != None)):
            return self.toate_valorile

        self.toate_valorile = self.cititor.read()
        return self.toate_valorile

        # TODO: filtre
        # idei: foloseste un dictionar cu keys fixe
        #       stabileste structura variabilei filtre
        #       calculeaza totalurile
        # daca tataluri contine punctul de lucru curent:
        #   verifica lista de sub cheia pl curent:
        #       daca contine casa curenta:
        #           daca contine perioada curenta, excluse raportarea



if __name__ == "__main__":
    cititor = ReaderConsum('/run/media/sebastian/Data64K/DBFConsmuri/TL/') # varianta cu folder ca argument
    calculator = CalculatorConsum(cititor)
    print calculator.total()
